//package com.zmn.plat.admin.controller.company;
//
//import com.alibaba.fastjson.JSONObject;
//import com.alibaba.nacos.api.config.annotation.NacosValue;
//import com.zmn.account.common.constant.AccountMqConsts;
//import com.zmn.account.common.constant.IdentityConsts;
//import com.zmn.account.common.dto.account.OpenAccountDIO;
//import com.zmn.common.constant.GlobalConsts;
//import com.zmn.common.constant.StatusConsts;
//import com.zmn.common.dto2.ResponseDTO;
//import com.zmn.common.utils.date.DateUtil;
//import com.zmn.common.utils.number.NumberUtil;
//import com.zmn.common.utils.pinyin.PinYinUtil;
//import com.zmn.common.utils.reflect.BeanMapper;
//import com.zmn.common.utils.string.InitialUtil;
//import com.zmn.common.utils.string.StringUtil;
//import com.zmn.erp.common.newbiz.dro.invoicemanage.InvoiceCompanyRegisterInfoDRO;
//import com.zmn.erp.dubbo.interfaces.newbiz.invoicemanage.InvoiceRegisterRemoteService;
//import com.zmn.framework.mq.ZmnMQException;
//import com.zmn.mcc.cas.model.LoginStaff;
//import com.zmn.plat.common.constant.CompanyConsts;
//import com.zmn.plat.common.exception.PlatException;
//import com.zmn.plat.dubbo.utils.DubboConsts;
//import com.zmn.plat.manager.utils.MqConsts;
//import com.zmn.plat.model.dto.company.InvoiceAddCompanyRegisterMessageDTO;
//import com.zmn.plat.model.entity.channel.Channel;
//import com.zmn.plat.model.entity.company.BaseCompany;
//import com.zmn.plat.model.entity.company.BaseCompanyQuery;
//import com.zmn.plat.model.es.company.EsCompany;
//import com.zmn.plat.model.vo.company.BaseCompanyVO;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.dubbo.config.annotation.Reference;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Controller;
//import org.springframework.util.CollectionUtils;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.*;
//
///**
// * 公司修改、添加
// *
// * @author duanzuocai
// * @version v1.0
// * @since 2018/10/16 17:18
// */
//@Controller
//@RequestMapping("/company/")
//@Slf4j
//public class CompanyModifyController extends CompanyBaseController {
//
//    private Logger logger = LoggerFactory.getLogger(CompanyModifyController.class);
//
//    private static String ERROR_MESSAGE = "三级组织架构已存在子公司，请更换后再试";
//
//    @NacosValue(value = "${spring.mq.topic.erp}", autoRefreshed = true)
//    public String platTopicErp;
//
//    @NacosValue(value = "${spring.mq.topic.account}", autoRefreshed = true)
//    public String platTopicAccount;
//
//    @Reference(version = DubboConsts.INTERFACE_VERSION, check = false)
//    InvoiceRegisterRemoteService invoiceRegisterRemoteService;
//
//    /**
//     * region 新增/修改
//     *
//     * @param request
//     * @param company
//     * @return
//     */
//    @RequestMapping(value = "addEdit")
//    @ResponseBody
//    public ResponseDTO addEdit(HttpServletRequest request, @RequestBody BaseCompany company) {
//        Date now = DateUtil.getNow();
//
//        company.setFirstLetter(InitialUtil.getFristEnName(company.getName()));
//
//        String pinyinName = PinYinUtil.stringToPinyin(Optional.ofNullable(company.getName()).orElse(""), ",");
//        company.setPinyinName(pinyinName);
//
//        String pinyinFullName = PinYinUtil.stringToPinyin(Optional.ofNullable(company.getFullName()).orElse(""), ",");
//        company.setPinyinFullName(pinyinFullName);
//
//        try {
//            // 一个子公司只允许挂一个组织架构
//            if (NumberUtil.isPositiveInteger(company.getOrgThrId())
//                    && Objects.equals(company.getType(), CompanyConsts.COMPANY_TYPE_SUBSIDIARY)) {
//                BaseCompanyQuery subQuery = new BaseCompanyQuery();
//                subQuery.setOrgThrId(company.getOrgThrId());
//                subQuery.setType(CompanyConsts.COMPANY_TYPE_SUBSIDIARY);
//                subQuery.setChildType(CompanyConsts.COMPANY_TYPE_CHILD_DEFAULT);
//                List<BaseCompany> companyList = companyService.listByQuery(subQuery);
//                // 没有关联任何组织架构说明是合法的
//                if (!CollectionUtils.isEmpty(companyList)) {
//                    // 只要大于1不管是新增还是修改都不合法
//                    if (companyList.size() > 1) {
//                        return ResponseDTO.fail(ERROR_MESSAGE);
//                    }
//                    // 等于1的情况
//                    else {
//                        // 修改
//                        if (NumberUtil.isPositiveInteger(company.getCompanyId())) {
//                            // 修改的不是自己
//                            if (!Objects.equals(companyList.get(0).getCompanyId(), company.getCompanyId())) {
//                                return ResponseDTO.fail(ERROR_MESSAGE);
//                            }
//                        } else {
//                            return ResponseDTO.fail(ERROR_MESSAGE);
//                        }
//
//                    }
//                }
//            }
//            // 电器公司和服务商存在subcompanyId,
//            if (Objects.equals(company.getType(), CompanyConsts.COMPANY_TYPE_ELECTRIC)
//                    || Objects.equals(company.getType(), CompanyConsts.COMPANY_TYPE_SERVICE)) {
//                Integer orgId = company.getOrgThrId();
//                if (!NumberUtil.isPositiveInteger(orgId)) {
//                    return ResponseDTO.fail("请选择组织架构");
//                }
//
//                BaseCompanyQuery query = new BaseCompanyQuery();
//                query.setOrgThrId(orgId);
//                query.setType(CompanyConsts.COMPANY_TYPE_SUBSIDIARY);
//                query.setStatus(GlobalConsts.YES);
//                List<BaseCompany> baseCompanyList = companyService.listByQuery(query);
//                if (CollectionUtils.isEmpty(baseCompanyList)) {
//                    return ResponseDTO.fail("组织架构[" + company.getOrgThrName() + "]没有关联公司，请先关联再操作");
//                }
//
//                BaseCompany baseCompany = baseCompanyList.get(0);
//                company.setSubCompanyId(baseCompany.getCompanyId());
//                company.setSubCompanyName(baseCompany.getName());
//            }
//
//            // 根据类型确定level
//            if (Objects.equals(company.getType(), CompanyConsts.COMPANY_TYPE_HEADOFFICE)) {
//                company.setLevel(CompanyConsts.COMPANY_LEVEL_ONE);
//            } else if (Objects.equals(company.getType(), CompanyConsts.COMPANY_TYPE_REGION)) {
//                company.setLevel(CompanyConsts.COMPANY_LEVEL_TWO);
//            } else if (Objects.equals(company.getType(), CompanyConsts.COMPANY_TYPE_SUBSIDIARY)) {
//                company.setLevel(CompanyConsts.COMPANY_LEVEL_THREE);
//            } else {
//                company.setLevel(CompanyConsts.COMPANY_LEVEL_FOUR);
//            }
//
//            Integer companyId = company.getCompanyId();
//            LoginStaff mcStaff = getMcStaff();
//            if (!NumberUtil.isPositiveInteger(company.getCompanyId())) {
//                company.setCreater(getMcStaffRealName());
//                company.setUpdater(getMcStaffRealName());
//                company.setCreateTime(now);
//                company.setUpdateTime(now);
//                companyId = companyService.insert(company);
//                // 发送公司消息给资金账户开户
////                sendCompanyOpenAccount(company, GlobalConsts.NO, mcStaff);
//                EsCompany map = BeanMapper.map(company, EsCompany.class);
//               // esCompanyService.putCompany(map);
//            } else {
//                company.setUpdater(getMcStaffRealName());
//                company.setUpdateTime(now);
//
//                companyService.updateByKey(company);
//                // 发送公司消息给资金账户开户
////                sendCompanyOpenAccount(company, GlobalConsts.YES, mcStaff);
//                EsCompany map = BeanMapper.map(company, EsCompany.class);
//               // esCompanyService.modifyCompany(map);
//            }
//
//            companyService.deleteAllCompanyAndAreasCatch();
//            // 新增或者修改供应商类型，发送消息
//            // sendSupplierMqMessage(Arrays.asList(companyId));
//
//            return ResponseDTO.success(Integer.toString(company.getCompanyId()), "操作成功！");
//        } catch (org.springframework.dao.DuplicateKeyException ex) {
//            logger.error("公司【{}】已经存在，不能重复添加！", company.getName());
//            return ResponseDTO.fail("公司已经存在，不能重复添加！");
//        } catch (Exception ex) {
//            logger.error(String.format("[zmn]新增/修改公司失败,category:[%s],ex:[%s]", JSONObject.toJSONString(company), ex.getMessage()));
//            return ResponseDTO.fail("操作失败！");
//        }
//    }
//
//    @RequestMapping(value = "updateStatus")
//    @ResponseBody
//    public ResponseDTO updateStatus(HttpServletRequest request, HttpServletResponse response,
//                                    @RequestParam(value = "ids", defaultValue = "") String ids, @RequestParam(value = "status", defaultValue = "0") int status) {
//
//        if (StringUtil.isBlank(ids)) {
//            return ResponseDTO.fail("请选择要更改状态的分类！");
//        }
//
//        List<Integer> arrayIds = StringUtil.convertStrsToList(ids);
//        companyService.updateStatusBatch(arrayIds, status, getMcStaffRealName());
//        // sendSupplierMqMessage(arrayIds);
//        return ResponseDTO.success(StatusConsts.STATUS_SUCCESS, "操作成功！");
//    }
//
//    @RequestMapping(value = "registerInvoicing")
//    @ResponseBody
//    public ResponseDTO registerInvoicing(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "ids") String ids) {
//
//        if (StringUtil.isBlank(ids)) {
//            return ResponseDTO.fail("请选择要注册开票的公司！");
//        }
//        // 公司集合
//        List<Integer> companyIds = StringUtil.convertStrsToList(ids);
//
//        try {
//            // 查询公司基本信息
//            BaseCompanyQuery query = new BaseCompanyQuery();
//            query.setCompanyIds(companyIds);
//            List<BaseCompanyVO> baseCompanyS = companyService.listVOByQuery(query);
//            for (BaseCompanyVO company : baseCompanyS) {
//                // 校验参数合法
//                if (StringUtil.isBlank(company.getCityName()) ||
//                        company.getPlat() == null || company.getCompanyId() == null || StringUtil.isBlank(company.getFullName()) ||
//                        StringUtil.isBlank(company.getName()) || StringUtil.isBlank(company.getMobile()) || StringUtil.isBlank(company.getLegalPersonName()) ||
//                        StringUtil.isBlank(company.getAddress()) || StringUtil.isBlank(company.getBankName()) || StringUtil.isBlank(company.getBankCardNo()) ||
//                        company.getProvinceId() == null || StringUtil.isBlank(company.getProvinceName()) || company.getCityId() == null ||
//                        company.getRegistTime() == null || company.getType() == null || company.getChildType() == null || company.getCountyId() == null ||
//                        StringUtil.isBlank(company.getLegalPersonIdcard()) || StringUtil.isBlank(company.getBankCardName()) || company.getTaxIncluded() == null) {
//                    return ResponseDTO.fail("勾选项中有公司的必填项未完善，请完善后再试！");
//                }
//                // 校验公司注册状态
//                ResponseDTO<InvoiceCompanyRegisterInfoDRO> companyRegisterInfo = invoiceRegisterRemoteService.getCompanyRegisterInfo(company.getCompanyId(), 11);
//                if (Objects.nonNull(companyRegisterInfo.getData()) && GlobalConsts.LEVEL_4 != companyRegisterInfo.getData().getInnerRegisterStatus()) {
//                    return ResponseDTO.fail("勾选项中含有已注册过的公司，请重新选择！");
//                }
//            }
//
//            // 发送注册消息
//            for (BaseCompanyVO company : baseCompanyS) {
//                if (Objects.nonNull(company) && Objects.equals(CompanyConsts.COMPANY_TYPE_HEADOFFICE, company.getType())) {
//                    InvoiceAddCompanyRegisterMessageDTO dto = InvoiceAddCompanyRegisterMessageDTO.builder()
//                            .plat(company.getPlat())
//                            .identityId(11) // erp定义
//                            .identityName("总公司") // erp定义
//                            .identityObjectId(company.getCompanyId())
//                            .identityObjectName(company.getFullName())
//                            .enterpriseAbbrName(company.getName())
//                            .enterprisePhone(company.getMobile())
//                            .corporateRepresentative(company.getLegalPersonName())
//                            .enterpriseAddress(company.getAddress())
//                            .bankName(company.getBankName())
//                            .bankAccount(company.getBankCardNo())
//                            .provinceId(company.getProvinceId())
//                            .provinceName(company.getProvinceName())
//                            .cityId(company.getCityId())
//                            .cityName(company.getCityName())
//                            .operator(getMcStaffRealName())
//                            .build();
//                    logger.info("发送消息->公司注册开票信息,message:{}", dto);
//                    zmnMQSender.send(platTopicErp, MqConsts.COMPANY_ADD_SELF, UUID.randomUUID().toString(), JSONObject.toJSONString(dto));
//                }
//            }
//            return ResponseDTO.success("success", "注册开始！");
//        } catch (PlatException e) {
//            logger.error("系统异常,原因:{}", e.getMessage(), e);
//            return ResponseDTO.fail("系统异常，请稍后再试！");
//        }
//    }
//
//    /**
//     * 描述: 同步公司数据到es
//     *
//     * @return com.zmn.common.dto.ResultDTO
//     * @author wangjie
//     * @since 2019/9/5
//     **/
//    @ResponseBody
//    @RequestMapping(value = "rebuildCompanyIndex")
//    public ResponseDTO rebuildCompanyIndex() {
//        try {
//            //esCompanyService.initEsData();
//            return ResponseDTO.success(true, "重建公司索引成功");
//        } catch (Exception e) {
//            logger.error("重建公司索引失败,e:{},msg{}", e, e.getMessage());
//            return ResponseDTO.fail("重建公司索引失败");
//        }
//    }
//
//    /**
//     * region 修改排序
//     *
//     * @param request
//     * @param companyId
//     * @param sort
//     * @return
//     * @author tanbiao
//     * @since 2019/09/06
//     */
//    @RequestMapping(value = "updateSort")
//    @ResponseBody
//    public ResponseDTO updateSort(HttpServletRequest request, @RequestParam(value = "id", defaultValue = "0") Integer companyId,
//                                  @RequestParam(value = "sort", defaultValue = "0") Integer sort) {
//
//        if (companyId == 0) {
//            return ResponseDTO.fail("请选择要更改排序的品牌！");
//        }
//        if (sort == 0) {
//            return ResponseDTO.fail("请设置品牌排序值！");
//        }
//
//        companyService.updateSortByKey(companyId, sort, getMcStaffRealName());
//        // sendSupplierMqMessage(Arrays.asList(companyId));
//        return ResponseDTO.success(StatusConsts.STATUS_SUCCESS, GlobalConsts.SUCCESS_MSG);
//    }
//
//    // private void sendSupplierMqMessage(List<Integer> arrayIds){
//    // // 发送mq消息
//    // BaseCompanyQuery query = new BaseCompanyQuery();
//    // query.setCompanyIds(arrayIds);
//    // List<BaseCompanyVO> list = companyService.listVOByQuery(query);
//    // list = list.stream().filter(e->Objects.equals(e.getType(),CompanyConsts.COMPANY_TYPE_SUPPLIER)).collect(Collectors.toList());
//    // if(!CollectionUtils.isEmpty(list)){
//    // List<CompanyDRO> dros = BeanCopyUtils.copyProperties(list,BaseCompanyVO.class,CompanyDRO::new);
//    // try {
//    // dros.forEach(e->zmnMQSender.send(platMqTopic,MQ_KEY_COMPANY,UUID.randomUUID().toString(), JSONObject.toJSONString(e)));
//    // }catch (Exception e){
//    // logger.error("send mq error..",e);
//    // }
//    //
//    // }
//    // }
//
////    /**
////     * 描述: 发送渠道消息给资金账户开户
////     *
////     * @param company 渠道
////     * @param type 处理类型：1新增，2修改
////     * @author guoqiao
////     * @since 2021/5/10 10:53
////     */
////    private void sendCompanyOpenAccount(BaseCompany company, Integer type, LoginStaff mcStaff) {
////
////        if (company == null || NumberUtil.isNullOrZero(type)) {
////            log.info("参数不合法");
////            return;
////        }
////        if (!Objects.equals(CompanyConsts.COMPANY_TYPE_SUBSIDIARY, company.getType())) {
////            log.info("公司不是子公司，不通知资金账户，company:{}", company);
////            return;
////        }
////        try {
////            OpenAccountDIO dio = new OpenAccountDIO();
////            dio.setHandleType(type);
////            dio.setIdentityId(IdentityConsts.ACCOUNT_IDENTITY_ID_INFORMATION_COMPANY);
////            dio.setIdentityObjectId(Long.valueOf(company.getCompanyId()));
////            dio.setIdentityObjectName(company.getFullName());
////            dio.setPlat(company.getPlat());
////            dio.setOrgThrId(company.getOrgThrId());
////            dio.setOrgThrName(company.getOrgThrName());
////            dio.setOperatorType(mcStaff.getType());
////            dio.setOperatorId(Long.valueOf(mcStaff.getStaffId()));
////            dio.setOperator(mcStaff.getStaffName());
////            log.info("发送消息->渠道资金账户开户,message:{}", dio);
////            zmnMQSender.send(platTopicAccount, AccountMqConsts.OPENING_ACCOUNT_TAG, UUID.randomUUID().toString(), JSONObject.toJSONString(dio));
////        } catch (ZmnMQException e) {
////            log.error("发送消息->渠道资金账户开户失败,原因:{}", e.getMessage(), e);
////        }
////    }
//}
